/**
 * @author: hdh
 * @date: 2022-06-29 9:19
 */
package com.yy.QSManage.service.base;

import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
import com.yy.QSManage.enums.ErrorCodeEnum;

import java.util.List;

/**
 * 校验
 * @author: HuDeHong
 * @date: 2022-06-29 9:19
 */
public interface VerificationService<T>{

    /**
     * 存在 抛出异常
     * @param field
     * @param param
     * @param errMsg
     * @return: void
     * @author: HuDeHong
     * @date: 2022-12-10 10:36
     */
    void ifExist(SFunction<T, Object> field, Object param, String errMsg);

    /**
     * 不存在 抛出异常
     * @param field
     * @param param
     * @param errMsg
     * @return
     */
    T ifNotExist(SFunction<T, Object> field, Object param, String errMsg);

    /**
     * 不存在 抛出异常
     * @param field
     * @param param
     * @param errorCodeEnum
     * @return
     */
    T ifNotExist(SFunction<T, Object> field, Object param, ErrorCodeEnum errorCodeEnum);

    /**
     * 是否存在
     * @param field
     * @param param
     * @return: boolean
     * @author: HuDeHong
     * @date: 2022-12-10 10:36
     */
    boolean ifExist(SFunction<T, Object> field, Object param);

    /**
     * 是否存在
     * @param field
     * @param param
     * @return
     */
    boolean ifExist(String field, Object param);

    /**
     * 是否存在（单条）
     * @param id
     * @param field
     * @param param
     * @param errMsg
     * @return: void
     * @author: HuDeHong
     * @date: 2022-12-10 10:32
     */
    T ifExist(String id, SFunction<T, Object> field, Object param, String errMsg);

    /**
     * 是否存在（多条）
     * @param ids
     * @param field
     * @param param
     * @param errMsg
     * @return: void
     * @author: HuDeHong
     * @date: 2022-12-10 10:32
     */
    List<T> ifExist(List<String> ids, SFunction<T, Object> field, Object param, String errMsg);

    /**
     * 是否重复
     * @param field
     * @param param
     * @param errMsg
     * @return: void
     * @author: HuDeHong
     * @date: 2023-02-28 10:00
     */
    void ifRepeat(SFunction<T, Object> field, Object param, String errMsg);

    /**
     * 是否重复
     * @param field
     * @param param
     * @return: boolean
     * @author: HuDeHong
     * @date: 2023-05-06 11:03
     */
    boolean ifRepeat(SFunction<T, Object> field, Object param);

    /**
     * 是否重复（排除id）
     * @param field
     * @param param
     * @param id
     */
    boolean ifRepeatExcludeId(SFunction<T, Object> field, Object param, String id);

    /**
     * 是否重复（排除id）
     * @param field
     * @param param
     * @param id
     * @return
     */
    boolean ifRepeatExcludeId(String field, Object param, String id);

    /**
     * 是否重复（排除id）
     * @param field
     * @param param
     * @param errMsg
     * @return: void
     * @author: HuDeHong
     * @date: 2023-02-28 10:00
     */
    void ifRepeatExcludeId(SFunction<T, Object> field, Object param, String id, String errMsg);
}
